﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace Jurassic_Island 
{

    public class CADEventosLocalizacion
    {
        static private String cadenaConexion = ConfigurationManager.ConnectionStrings["JurassicBDConnectionString"].ConnectionString;
        SqlConnection conexion;
        DataSet dsEvloc;
        SqlDataAdapter sqldaEvloc;

        public CADEventosLocalizacion()//constructor por defecto sin nada
        {

        }

        public DataSet ObtenerTablaEventosLocalizacion()
        {
            DataSet dsEventos_Localizacion = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "Select id_evloc as 'ID', nombre_evloc as 'Nombre', sitio_evloc as 'Sitio', efecto_evloc as 'Efecto' from Eventos_Localizacion";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);
                daEventos_Localizacion.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                daEventos_Localizacion.Fill(dsEventos_Localizacion, "Eventos_Localizacion");
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return dsEventos_Localizacion;
        }

        public string InsertarEventosLocalizacion(int id_evloc, string nombre_evloc, string sitio_evloc, double efecto_evloc)//metodo que inserta eventos de localizacion
        {
            string retorno = "";
            try
            {
                conexion = new SqlConnection(cadenaConexion);
                sqldaEvloc = new SqlDataAdapter("select * from Eventos_Localizacion", conexion);
                dsEvloc = new DataSet();
                sqldaEvloc.Fill(dsEvloc, "Eventos_Localizacion");
                DataTable t = new DataTable();
                t = dsEvloc.Tables["Eventos_Localizacion"];
                DataRow nuevafila = t.NewRow();
                nuevafila[1] = nombre_evloc;
                nuevafila[2] = sitio_evloc;
                nuevafila[3] = efecto_evloc;

                t.Rows.Add(nuevafila);
                SqlCommandBuilder cbuilder = new SqlCommandBuilder(sqldaEvloc);
                if (sqldaEvloc.Update(dsEvloc, "Eventos_Localizacion") == 0) //si el nº d filas actualizadas correctamente no es 0
                    retorno = "ERROR al insertar";
            }
            catch (SqlException sqlEx)
            {
                return "ERROR relacionado con la base de datos.\nDetalles:\n" + sqlEx.Message;
            }
            catch (Exception ex)
            {
                return "ERROR al intentar insertar un evento de localización.\nDetalles:\n" + ex.Message;
            }
            return retorno;
        }

        public DataSet EditarTablaEventosLocalizacion(string nombre_evloc, string sitio_evloc, double efecto_evloc)
        {
            DataSet dsEventos_Localizacion = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "update Eventos_Localizacion set nombre_evloc='" + nombre_evloc + "', sitio_evloc=" + sitio_evloc + ", efecto_evloc=" + efecto_evloc + "' where nombre_evloc='" + nombre_evloc + "';";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);
                daEventos_Localizacion.Fill(dsEventos_Localizacion, "Eventos_Localizacion");
            }

            catch (Exception ex)
            {
                throw (ex);
            }

            return dsEventos_Localizacion;
        }

        public DataSet BuscarEventosLocalizacion(string nombre)
        {
            DataSet dsEventos_Localizacion = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "Select id_evloc as 'ID', nombre_evloc as 'Nombre', sitio_evloc as 'Sitio', efecto_evloc as 'Efecto' from Eventos_Localizacion where nombre_evloc like '%" + nombre + "%';";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);

                daEventos_Localizacion.Fill(dsEventos_Localizacion, "Eventos_Localizacion");
            }

            catch (Exception ex)
            {
                throw (ex);
            }

            return dsEventos_Localizacion;
        }

        public DataSet BorrarEventosLocalizacion(string nombre)
        {
            DataSet dsEventos_Localizacion = new DataSet();
            
            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "delete from Eventos_Localizacion where nombre_evloc like '" + nombre + "';";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);

                daEventos_Localizacion.Fill(dsEventos_Localizacion, "Eventos_Localizacion");
            }

            catch (Exception ex)
            {
                throw (ex);
            }
            return dsEventos_Localizacion;
        }

        public DataSet ObtenerNombreEventoLocalizacion()
        {
            DataSet dsEventos_Localizacion = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "Select nombre_evloc as 'Nombre' from Eventos_Localizacion;";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);

                daEventos_Localizacion.Fill(dsEventos_Localizacion, "Eventos_Localizacion");
            }

            catch (Exception ex)
            {
                throw (ex);
            }
            return dsEventos_Localizacion;
        }

        public bool ActualizarEventosLocalizacion(DataSet dsEventos_Localizacion)
        {
            bool resultado = false;

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "Select id_evloc as 'ID', nombre_evloc as 'Nombre', sitio_evloc as 'Sitio', efecto_evloc as 'Efecto' from Eventos_Localizacion";
                SqlDataAdapter daEventos_Localizacion = new SqlDataAdapter(consulta, conexion);
                SqlCommandBuilder cb = new SqlCommandBuilder(daEventos_Localizacion);
                cb.ConflictOption = ConflictOption.OverwriteChanges;
                //daEventos_Localizacion.UpdateCommand = cb.GetUpdateCommand();
                daEventos_Localizacion.Update(dsEventos_Localizacion, "Eventos_Localizacion");
                dsEventos_Localizacion.Tables["Eventos_Localizacion"].AcceptChanges();

                resultado = true;
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }

        //otro metodo auxiliar para los eventos
        public DataSet ObtenerTablaEventosLocalizacionPorLugar(String lugar)
        {
            DataSet dsEvLoc = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadenaConexion);
                String consulta = "Select id_evloc as 'ID', nombre_evloc as 'Nombre', sitio_evloc as 'Sitio', efecto_evloc as 'Efecto' from Eventos_Localizacion where sitio_evloc like '%" + lugar + "%'";
                SqlDataAdapter daEvLoc = new SqlDataAdapter(consulta, conexion);
                daEvLoc.MissingSchemaAction = MissingSchemaAction.AddWithKey;
                daEvLoc.Fill(dsEvLoc, "Eventos_Localizacion");
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return dsEvLoc;
        }       
    }
}
